define([
    'Util',
    '../common/getMenu',
    'list',
    'form',
    'text!tpl/requirement/requireList.tpl',
    'text!tpl/requirement/requireListTabelList.tpl',
    'cookie',
    'dialog',
    'select',
    'tab',
    'loading',
    '../common/getPath',
    '../common/getQueryString',
    'date',
    'inputTag',
    '../common/dateFormat',
    '../common/dateFormat'
], function(Util, getMenu, List, Form, tpl, tabelTpl, $cookie, Dialog, Select, Tab, Loading, AjaxPath, GetQueryString, MyDate, inputTag) {
    require(['style!css/style.css']);

           var $el = null;
    
            var _indexModule = null,
                list = null,
                tplId = null,
                tab = null,
                handLoading = null,
                loadingConfig = null,
                selectDrop = null,
                isShow = false,
                cycleDate = null,
                createTimeDate = null,
                editorTimeDate = null,
                excuterSelect = null,
                comboSelect=null,           //多选标签
                Authority = null,          //用户权限按钮判断；
                dialogAuthority=null;     //查看项目信息浮层修改项目按钮判断；

        var initialize = function(indexModule, options, tabItem){
            $el = $(tpl);
            _indexModule = indexModule;
            
            $(tabItem).on("tabActive", function() {
                tabItem.show(true); //刷新表单
            });
            tab = tabItem;
            createLoading();
            this.content=$el;
            tplId = options.menuId;
            // 业务相关代码
            eventInit();
            getAuthority();
            inSelect();
            initDate();
            inlabel();
            btnAuthority($el);
            // listInit();
            getMenu(tab, options.menuId);
        };

        var eventInit = function (){
            //页面除dialog按钮功能
            $el.on('click', '#btnAdd', addProject);
            $el.on('click', '#btnDel', delProject);
            $el.on('click', '#btnExp', expUsers);
            $el.on('click', '#btnExpChecked', expUsers);
            $el.on('click', '.btnSearch', search);
            $el.on('click', '.btnReset', searchRest);
            $el.on('click', '.needEditBtn', editProject);
            $el.on('click', '.projectDeleteBtn', delProject);
            $el.on('click', '.createChildBtn', editProject); 
            $el.on('click', '.flowActions>button', editFlowActions);     
            $('#tabList li.' + tplId).on('click', tabActive);

            $(document).on('click', '#projectActiveLogWrap .t-list li>a', actLogChange);
        };
        var tabActive = function() {
            // listInit();
            var pageIndex=list.pageIndex;
            search(pageIndex);
            getMenu(tab, tplId);   
        };

        var search = function(pageIndex) {
            var data = Form.serialize($('.needProjectForm', $el));
            data.limit = 10;
            data.page = 1;
            if(comboSelect.getCheckSelectTag('key').length===0){
               data.tagIds=null;
            }else{
                data.tagIds=JSON.stringify(comboSelect.getCheckSelectTag('key'));
            }

            var page=pageIndex;
            var oIndex = $('.needProjectForm', $el).attr('pageIndex');
            if(oIndex){
                list.search(data, Number(oIndex));
                $(".needListContainer").find("a").removeClass("theSort");
            } else {
                console.log(data, Number(page));
                list.search(data,Number(page));
                $(".needListContainer").find("a").removeClass("theSort");
            }
        }
        var searchRest = function(){
            $("input[name=systemName]",$el).val("");
            $("input[name=presentPeople]",$el).val("");
            $("input[name=requireTitle]",$el).val("");
            $("input[name=requireType]",$el).val("");
            $("input[name=tryPeople]",$el).val("");
            $("input[name=proposeTime]",$el).val("");
            $("input[name=createTime]",$el).val("");
            $("input[name=updateTime]",$el).val("");

            needTypeSelect.setValue(0);
            iterationSelect.setValue(0);
            statusSelect.setValue(0);
            levelSelect.setValue(0);
            comboSelect.resetSelectTag();

            list.search();
            $(".needListContainer").find("a").removeClass("theSort");
        }
         
        //下拉框select组件；；
        var inSelect = function() {
        //requireType工作项类型
            Util.ajax.getJson( AjaxPath.project + "/dropdown?modual=require&type=requireType&mode=requirelist", {}, function(result, isok){
                needTypeSelect = new Select({
                    el:$("#requireType", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    }, 
                    label:'类型:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'requireType',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取工作项类型");
                    } //select的DOM结构加载完后执行
                    //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
                });
                // $("#projectManage .sn-select-container").addClass("mt-5");
                // $("#projectExcuter", $el).find('a.sn-select-single>span').html("所有");
                needTypeSelect.setValue(0);
            });

        //迭代，sprintName；
            // Util.ajax.getJson( AjaxPath.project + "/dropdown?modual=requireList&type=sprints&userId="+$cookie.get("userId"), {}, function(result, isok){
            Util.ajax.getJson( AjaxPath.project+'/dropdown?modual=publish&type=sprints&systemId='+$cookie.get("projectSelectId"), {}, function(result, isok){ 
                iterationSelect = new Select({
                    el:$("#sprintName", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    }, 
                    label:'迭代:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'sprintId',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取迭代");
                    } //select的DOM结构加载完后执行
                    //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
                });
                // $("#projectManage .sn-select-container").addClass("mt-5");
                // $("#projectExcuter", $el).find('a.sn-select-single>span').html("所有");
                iterationSelect.setValue(0); 
            });

        //状态，status;
            // Util.ajax.getJson( AjaxPath.project + "/dropdown?modual=require&type=requireStatus", {}, function(result, isok){
            Util.ajax.getJson( AjaxPath.project + "/dropdown?modual=require&type=getDefectAndRequireStatus&systemId=" + $cookie.get("projectSelectId"), {}, function(result, isok){
                statusSelect = new Select({
                    el:$("#statusName", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    }, 
                    label:'状态:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'status',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取状态");
                    } //select的DOM结构加载完后执行
                    //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
                });
                // $("#projectManage .sn-select-container").addClass("mt-5");
                // $("#projectExcuter", $el).find('a.sn-select-single>span').html("所有");
                statusSelect.setValue(0);
            });

        //优先级，level
            Util.ajax.getJson( AjaxPath.project + "/dropdown?modual=require&type=priStatus", {}, function(result, isok){
                levelSelect = new Select({
                    el:$("#priStatus", $el),       //要绑定的容器
                    ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置，<span class="s">慎用</span>
                        method:'GET'
                    }, 
                    label:'优先级:', //下拉框单元左侧label文本，可不配置
                    selectText:false,       //是否显示  ‘选择|清除’  模式
                    name:'priStatus',    //下拉框单元右侧下拉框名称
                    disabled:false,     //组件是否被禁用
                    topOption:"请选择", //设置最顶部option的text属性
                    value:'',//初始选中项设置 默认是按value，如果你想按id设置 也可以 value:[&quot;id&quot;,1],这样设置
                    textField:"value",   //设置下拉框内容，填写数据中对应的字段名
                    valueField:"key",//设置下拉框value，填写数据中对应的字段名
                    datas: result.beans,         //数据源
                    loadAtClick:false,// true--第一次点击时渲染|false或不配置--初始化时渲染
                    dataReady:function(){
                        console.log("获取优先级");
                    } //select的DOM结构加载完后执行
                    //  url:'../data/select.json'  //数据源，不建议使用，后期将会移除
                });
                // $("#projectManage .sn-select-container").addClass("mt-5");
                // $("#projectExcuter", $el).find('a.sn-select-single>span').html("所有");
                levelSelect.setValue(0);
            });
        };
        //标签筛选，
        var inlabel=function(){
            Util.ajax.getJson( AjaxPath.project + "/dropdown?modual=require&type=tag", {}, function(result, isok){
                // console.log(result.beans);return;
                var data=result.beans;
                var config = {
                    el:$('#gooflowStatus', $el),       //必填 要绑定的容器
                    datas: data,           //必填 数据源
                    textField: 'value',        //设置下拉框内容，填写数据中对应的字段名
                    valueField : 'key',
                    placeholder:'请选择',
                    addTag: false,             //必填  是否可以添加新标签
                    optionItemClick:function(){ //必填 点击时获取当前点击项的数据
                          return comboSelect.getSelected();
                    }
              }
               comboSelect = new inputTag(config);

            //   var checkTag = [{name:"唐僧"}];
            //   comboSelect.checkSelectTag(checkTag);  //设置默认选中项
              // console.log(comboSelect.getCheckSelectTag()); //获取选中标签数据
              // comboSelect.resetSelectTag(); //清空已选择
            //   console.log(comboSelect.getCheckSelectTag('key'))

            });
        };

        var initDate = function() {
            needDate = new MyDate({
                el:$("#proposeTime", $el),
                inputClassName:'date',
                label:'提出时间:',
                name:'proposeTime',    //开始日期文本框name
                isReadOnly:true,  //项可设置日期输入框是否只读
                min: -365,         //最小日期限制
                range:true,
                type:"date",
                inputPlaceholder:"请选择",
                // defaultValue:"2017-09-20 - 2017-10-24",
                defaultValue:"",
                btns:['clear', 'now', 'confirm'],
                done:function(dates,value,endDate){
                    // createTimeDate.options.min = dates; //设置创建日期的最小限制
                    // editorTimeDate.options.min = dates; //设置结束日期的最小限制
                } //用户选中日期时执行的回调函数
            });

            createTimeDate = new MyDate({
                el:$("#createTime", $el),
                inputClassName:'date',
                label:'创建时间:',
                name:'createTime',    //开始日期文本框name
                isReadOnly:true,  //项可设置日期输入框是否只读
                min: -365,         //最小日期限制
                range:true,
                type:"date",
                inputPlaceholder:"请选择",
                // defaultValue:"2017-09-20 - 2017-10-24",
                defaultValue:"",
                btns:['clear', 'now', 'confirm'],
                done: function(dates,value,startDate){
                    // editorTimeDate.options.min = dates; //设置结束日期的最小限制
                }
            });

            editorTimeDate = new MyDate({
                el:$("#updateTime", $el),
                inputClassName:'date',
                label:'更新时间:',
                name:'updateTime',    //开始日期文本框name
                isReadOnly:true,  //项可设置日期输入框是否只读
                min: -365,         //最小日期限制
                range:true,
                type:"date",
                inputPlaceholder:"请选择",
                // defaultValue:"2017-09-20 - 2017-10-24",
                defaultValue:"",
                btns:['clear', 'now', 'confirm'],
                done:function(dates,value,endDate){
                } //用户选中日期时执行的回调函数
            });
        }
        
        var listInit = function (){
            var config = {
                el: $('.needListContainer', $el),
                ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                    method:'GET'
                },
                field: {
                    boxType: 'checkbox',
                    key: 'id',
                    items: [
                    {
                        text: '项目名称',
                        title: 'systemName',
                        name: 'systemName',
                        className: 'w90',
                        sorting:1,
                        width:200,
                        click: function (e, val, item) {

                            handLoading = new Loading(loadingConfig);
                            creatDialog(e, item);
                            handLoading.destroy();
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html();
                            val = val.replace(/\s/g, '&nbsp;');
                            return '<a href="javascript:;" class="text-overflow text-pre" style="line-height:36px;display:block;outline:none">' + val + '</a>';
                        }
                    },
                    {
                        text: '类型',
                        title: 'requireTypeName',
                        name: 'requireTypeName',
                        className: 'w120',
                        width:140,
                        sorting:1
                    },
                    {
                        text: '工作项名称',
                        title: 'requireTitle',
                        name: 'requireTitle',
                        className: 'w90',
                        sorting:1,
                        width:200,
                        click: function (e, val,item) {
                            if(item.data.type===1){
                                createDialogViewRequirement(e, item);
                            } else if(item.data.type===2){
                                viewSubTaskDialog(e,item);
                            }
                            
                           
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html();
                            return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none">' + val + '</a>';
                        }
                    },
                    {
                        text: '工作项编号',
                        title: 'requireNum',
                        name: 'requireNum',
                        className: 'w90',
                        sorting:1,
                        width:150,
                        click: function (e, val,item) {
                            if(item.data.type===1){
                                createDialogViewRequirement(e, item);
                            } else if(item.data.type===2){
                                viewSubTaskDialog(e,item);
                            }
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html();
                            return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none">' + val + '</a>';
                        }
                    },
                    {
                        text: '迭代',
                        title: 'sprintName',
                        name: 'sprintName',
                        className: 'w90',
                        sorting:1,
                        width:130,
                        click: function (e, val,item) {
                            $(".needListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td",$el).click();
                            $(".needListContainer .sn-list-show table tbody tr",$el).eq(e.currentTarget.parentNode.rowIndex).find('td').click();
                            var nodes = list.getCheckedRows();
                            var data = {};
                            data.limit = 10;
                            data.page = 1;
                            data.sprintId=nodes[0].sprintId                                           
                            list.search(data);
                            $(".needListContainer").find("a").removeClass("theSort");
                            $("select[name=sprintId]",$el).val(nodes[0].sprintId);
                            //迭代下拉框同步迭代名称和id；
                            $("#sprintName span",$el).text(nodes[0].sprintName);
                        },
                        render: function (item, val) {
                            val = $('<span/>').text( val ).html();
                            return '<a href="javascript:;" class="text-overflow" style="line-height:36px;display:block;outline:none">' + val + '</a>';
                        }
                    },
                    {
                        text: '状态',
                        title: 'statusName',
                        name: 'statusName',
                        className: 'w120',
                        width:115,
                        sorting:1
                    },
                    {
                        text: '优先级',
                        // title: 'priStatus',
                        name: 'priStatus',
                        className: 'w120',
                        width:115,
                        sorting:1
                    },
                    {
                        text: '关联代码',
                        // title: 'refCode', 
                        name: 'refCode',
                        className: 'w120',
                        width:125,
                        sorting:1
                    },
                    {
                        text: '经办人',
                        // title: 'tryPeopleName',
                        name: 'tryPeopleName',
                        className: 'w120',
                        width:115,
                        sorting:1
                    },
                    {
                        text: '提出人',
                        // title: 'presentPeople',
                        name: 'presentPeople',
                        className: 'w120',
                        width:115,
                        sorting:1
                    },
                    {
                        text: '提出时间',
                        // title: 'proposeTime',
                        name: 'proposeTime',
                        className: 'w90 requireTimeHide',
                        sorting: 1,
                        width: 130,
                        render: function (item, val) {
                            if(val){
                                return new Date(val).Format("yyyy-MM-dd");
                            }                       
                        }
                    },
                    {
                        text: '创建时间',
                        // title: 'createTime',
                        name: 'createTime',
                        className: 'w90',
                        width: 150,
                        sorting:1,
                        render: function (item, val) {
                            if(val){
                               return new Date(val).Format("yyyy-MM-dd hh:mm:ss"); 
                            }                 
                        }
                    },
                    {
                        text: '更新时间',
                        // title: 'updateTime',
                        name: 'updateTime',
                        className: 'w90 requireTimeHide',
                        sorting: -1,
                        width: 150,
                        render: function (item, val) {
                            if(val){
                               return new Date(val).Format("yyyy-MM-dd hh:mm:ss"); 
                            }      
                        }
                    },                  
                    {
                        text: '操作',
                        title: '',
                        name: '',
                        width:'',
                        className: 'w90',
                        click: function (e, val, item) {
                            // console.log(val,item);
                        },
                        render: function (item, val) {
                            var arr=item.flowActions;
                            var desc="";
                            var buttonId="";
                            var id=item.id;
                            var descButton = "";
                            $(arr).each(function(index,items){
                                if(items.description){
                                    desc=items.description;
                                    buttonId=items.toValue;
                                    descButton=descButton+'<button style="margin-right:2px;" class="t-btn t-btn-blue t-btn-xs" btnId='+buttonId+' id='+id+'><a style="color:#fff">'+desc+'</a></button>';
    
                                }                               
                            })

                            var defaultButton = "";
                            if(item.tryPeople==$cookie.get("userId")){
                                defaultButton = '<button style="margin-right:2px;" class="t-btn t-btn-blue t-btn-xs needEditBtn"><a style="color:#fff">修改</a></button>';
                            };
                            if(Authority){
                                defaultButton = '<button style="margin-right:2px;" class="t-btn t-btn-blue t-btn-xs needEditBtn"><a style="color:#fff">修改</a></button><button class="t-btn t-btn-blue t-btn-xs projectDeleteBtn"><a style="color:#fff">删除</a></button>';
                            }
    
                            return '<div class="fn-right" style="color:#fff"><div class="flowActions" style="margin-right:3px; display:inline-block">'+descButton+'</div><button style="margin-right:5px;" class="t-btn t-btn-blue t-btn-xs createChildBtn"><a style="color:#fff">新建子工作项</a></button>'+defaultButton+'</div>';
                        }
                    }]
                },
                page: {
                    customPages: [2, 3, 5, 6, 10, 15, 20, 30, 50], //可选择每页显示多少条
                    perPage: 5, //默认每页显示多少条记录
                    total: true
                },
                data: {
                    url: AjaxPath.demand + "/requires?userId="+ $cookie.get("userId")+"&systemId="+$cookie.get("projectSelectId")
                    // url:"http://192.168.91.172:8089/devops-project/projects"
                    // url:"../../../data/needSelect.json"
                }
            };
            list = new List(config);
            list.search();
        }
        
        //点击新增工作项；
        var addProject = function(e) {
            tab.createTab({
                title: '新增工作项',
                closeable: 1, //是否可以关闭 0false不可以|1true可以
                className: 'addReqTab'
            });
            tab.switchTab('新增工作项');
            var projectdata = {};
            projectdata.menuId = tplId;
            require(['js/requirement/addRequirement'], function(addProjectContent) {
                var result = new addProjectContent({}, projectdata, tab);
                tab.content(result.content);
            });
            
        }
        //两个按钮删除功能
        var delProject = function(e){
            
            if(e.currentTarget.id!=="btnDel"){
                $(".needListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td",$el).click();
                $(".needListContainer .sn-list-show table tbody tr",$el).eq(e.currentTarget.parentNode.parentNode.parentNode.rowIndex).find('td').click();
            }

            handLoading = new Loading(loadingConfig);
            var nodes = list.getCheckedRows();
            if(nodes.length < 1) {
                handLoading.destroy();
                config = {
                    mode: 'tips',
                    content: '<div style="text-align:center;margin-top:70px">请选择至少一条数据进行删除！</div>',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false
                };
                var dialog = new Dialog(config);
            } else {
                var data = [];var obj = new Object();
                for(var i = 0; i < nodes.length; i++) {
                    
                    
                    // obj.orgId = list.getCheckedRows()[i].orgId;
                    // obj.projectName = list.getCheckedRows()[i].projectName;
                    data.push(list.getCheckedRows()[i].id);
                }
                obj.ids=data;
                var content = "";
                for(var k = 0; k < data.length; k++) {
                    content = content + data[k].projectName + ",";
                }
                var str = JSON.stringify(obj);
                delDialogBox(content, nodes, data, str);
            }    
        }
        var delDialogBox = function(content, nodes, data, str) {
            handLoading.destroy();
            var config = {
                mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                title: "删除提示", //对话框标题
                content: '<div style="text-align:center;margin-top:50px">确认删除选择的工作项？</div>' /* + content.substring(0,content.length-1)*/ , //对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                ok: function() {
                    handLoading = new Loading(loadingConfig);
                    deleteProject(nodes, data, str);
                    return true;
                }, // 配置该项时才会出现ok按钮，回调函数可为空。如果指定 return false 则执行完方法后不关闭对话框。默认 return true
                okValue: '确定', //确定按钮的文本 默认是 ‘ok’
                cancel: function() {}, //取消按钮的回调函数,配置该项时才会出现关闭按钮，回调函数可为空。
                cancelValue: '取消', //取消按钮的文本 默认是 ‘关闭’
                cancelDisplay: true, //是否显示取消按钮 默认true显示|false不显示
                width: 300, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                height: 120, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                padding: '0 16px 1em 10px', //(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                align: 'bottom right', //设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                skin: 'dialogSkin dialogSkin2', //设置对话框额外的className参数,多个className请使用空格隔开。
                fixed: true, //是否开启固定定位 默认false不开启|true开启
                quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                modal: true, //是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                beforeOpen: function() {}, //对话框打开之前执行。
                zIndex: 990 // 对话框的z-index值，默认是1024。
            };
            var delDialog = new Dialog(config)
        };

        var deleteProject = function(nodes, data, str) {
            
                Util.ajax.postJson(AjaxPath.demand+ "/requires/delete", str, function(result, isok) {
                    var flag = result.returnMessage;
                    if(undefined === flag) {
                        handLoading.destroy();
                        new Dialog({
                            mode: 'confirm', //对话框模式，默认normal标准|tips浮动层|tips确认对话框
                            title: '提示', //对话框标题
                            width: 300,
                            height: 120,
                            modal: true,
                            content: '<div style="text-align:center;margin-top:50px">与服务器通讯失败，请检查网络！</div>', //对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                            cancelDisplay: false,
                            ok: function() {}, // 配置该项时才会出现ok按钮，回调函数可为空。如果指定 return false 则执行完方法后不关闭对话框。默认 return true
                            okValue: '关闭' //确定按钮的文本 默认是 ‘ok’
                        });
                        return;
                    } else {
                        handLoading.destroy();
                        new Dialog({
                            mode: 'tips',
                            content: '<div style="text-align:center;margin-top:70px">'+ result.returnMessage +'</div>',
                            width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                            height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                            cancelDisplay: false
                        });
                        if(result.returnCode==="0000"){
                            search();
                        }
                    }
                },"application/json")
            
        }

        //两个导出按钮，
        var expUsers = function(e) {
            var arr = list.getCheckedRows(),newArr=[],str,a=[1,2];
            for(var i = 0; i < arr.length; i++ ){
                newArr.push(arr[i].id);
            }
            var data = Form.serialize($('.needProjectForm', $el));
            data.tagIds= JSON.stringify(comboSelect.getCheckSelectTag('key'));
            // console.log(1,JSON.stringify(newArr));return;
            // console.log(2,data);return;
            if(e.currentTarget.id === "btnExpChecked" && arr.length<1){
                new Dialog({
                    mode: 'tips',
                    content: '<div style="text-align:center;margin-top:70px">请选择至少一条数据进行导出！</div>',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false
                });
            } else if(e.currentTarget.id === "btnExp"){
                window.location.href = AjaxPath.demand + "/requires/export?userId="+$cookie.get("userId")+"&systemName="+data.systemName+"&presentPeople="+data.presentPeople+"&proposeTime="+data.proposeTime+"&requireTitle="+data.requireTitle+"&requireType="+data.requireType+"&tryPeople="+data.tryPeople+"&createTime="+data.createTime+"&updateTime="+data.updateTime+"&sprintId="+data.sprintId+"&priStatus="+data.priStatus+"&status="+data.status+"&tagIds="+data.tagIds+"&systemId="+$cookie.get("projectSelectId");
            
            } else {
                window.location.href = AjaxPath.demand + "/requires/export?userId="+$cookie.get("userId")+"&ids="+JSON.stringify(newArr);
            }
            // window.location.href = AjaxPath.demand + "/projects/export";
        }

        //修改按钮，和创建子工作项；跳出tab页面；
        var editProject = function(e, index){
            // console.log(e.currentTarget.parentNode.parentNode.rowIndex);
            
            if(!index && index!==0){
                $(".needListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td",$el).click();
                $(".needListContainer .sn-list-show table tbody tr",$el).eq(e.currentTarget.parentNode.parentNode.parentNode.rowIndex).find('td').click();
            }else{
                $(".needListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td",$el).click();
                $(".needListContainer .sn-list-show table tbody tr",$el).eq(index).find('td').click();
            }

            var datas = list.getCheckedRows();
            // console.log(e.currentTarget.classList[3]);return;
            // console.log(datas);

            if(datas.length === 0 || datas.length > 1) {
                config = {
                    mode: 'tips',
                    content: '<div style="text-align:center;margin-top:70px">请选择至少一条数据修改！</div>',
                    width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                    cancelDisplay: false
                };
                var dialog = new Dialog(config);
            }else {
                if(e.currentTarget.classList[3]==="needEditBtn"){
                  
                    if(datas[0].type===1){
                        console.log("修改工作项",datas[0]);
                        tab.createTab({
                            title: '修改工作项',
                            closeable: 1, //是否可以关闭 0false不可以|1true可以
                            className: 'editReqTab'
                        });
                        tab.switchTab('修改工作项');
                        var projectdata = datas[0];
        
                        var positiondata = datas[0];
                        // positiondata.orgId=selectdata.id;
                        // positiondata.orgName=selectdata.name;
                        projectdata.menuId = tplId;
                        require(['js/requirement/editRequirement'], function(projectEditContent) {
                            var result = new projectEditContent({}, projectdata, tab);
                            tab.content(result.content);
                        });

                    }else if(datas[0].type===2){
                        console.log("修改子工作项",datas[0].type);

                        tab.createTab({
                            title: '修改子工作项',
                            closeable: 1, //是否可以关闭 0false不可以|1true可以
                            className: 'editSubTaskTab'
                        });
                        tab.switchTab('修改子工作项');
                        var projectdata = datas[0];
        
                        var positiondata = datas[0];
                        // positiondata.orgId=selectdata.id;
                        // positiondata.orgName=selectdata.name;
                        projectdata.menuId = tplId;
                        require(['js/requirement/editSubTask'], function(editSubTaskContent) {
                            var result = new editSubTaskContent({}, projectdata, tab);
                            tab.content(result.content);
                        });
                    }                 
                
                } else if (e.currentTarget.classList[3]==="createChildBtn"){
                    tab.createTab({
                        title: '新建子工作项',
                        closeable: 1, //是否可以关闭 0false不可以|1true可以
                        className: 'addSubTaskTab'
                    });
                    tab.switchTab('新建子工作项');
                    var projectdata = datas[0];
    
                    var positiondata = datas[0];
                    projectdata.sprint = datas[0].sprintId;
                    // positiondata.orgId=selectdata.id;
                    // positiondata.orgName=selectdata.name;
                    projectdata.menuId = tplId;
                    require(['js/requirement/addSubTask'], function(addSubTaskContent) {
                        var result = new addSubTaskContent({}, projectdata, tab);
                        tab.content(result.content);
                    });
                } else {
                    Util.ajax.getJson(AjaxPath.project + "/projects/" + datas[0].systemId, {}, function(result, isok) {
                            // console.log(result.beans.project);

                    //列表页选中第几页，修改跳转后回来保存，但新建会出问题
                // $('.searchProjectForm', $el).attr('pageIndex', list.pageIndex);
                tab.createTab({
                    title: '修改项目',
                    closeable: 1, //是否可以关闭 0false不可以|1true可以
                    className: 'editProjectTab'
                });
                tab.switchTab('修改项目');
                var projectdata = result.beans.project;

                // var positiondata = datas[0];
                // positiondata.orgId=selectdata.id;
                // positiondata.orgName=selectdata.name;
                projectdata.menuId = tplId;
                require(['js/project/editProject'], function(projectEditContent) {
                    var result = new projectEditContent({}, projectdata, tab);
                    tab.content(result.content);
                });
            });
                } 
            }
        }

        //点击FlowActions按钮
        var editFlowActions=function(e){
            $(".needListContainer .sn-list-content-locker.sn-list-show table tbody tr.selected td",$el).click();
            $(".needListContainer .sn-list-show table tbody tr",$el).eq(e.currentTarget.parentNode.parentNode.parentNode.parentNode.rowIndex).find('td').click();
            var datas = list.getCheckedRows();
            var obj={};
            obj.type=datas[0].type;
            obj.id= $(e.currentTarget).attr("id");
            obj.status=$(e.currentTarget).attr("btnId");
            obj.updater=$cookie.get("userId");
       
           var str = JSON.stringify(obj);
          
           Util.ajax.postJson(AjaxPath.demand+ "/requires/status", str, function(result, isok) {
               if(result.returnCode !== "0000"){
                    var config = {
                        mode: 'confirm', // 对话框模式，默认normal标准|confirm浮动层|confirm确认对话框
                        title:'提示',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 120, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false, //是否显示取消按钮（强制执行，可在confirm模式下生效），可选项。 默认true(显示)
                        modal:true,
                        content: '<div style="text-align:center;margin-top:50px">'+result.returnMessage+'</div>' // 对话框内容，可以是字符串、html片段、或dom对象,默认为loading状态（点组成的圈）
                    };
                    new Dialog(config);
                    // ViewRequireNextStatus.on('onclose',function(){
                    // });
                }
           },"application/json");
           var pageIndex=list.pageIndex;
           search(pageIndex);
        }

        //查看项目信息浮层；
        var creatDialog = function(e, item){
          
            Util.ajax.getJson(AjaxPath.project + "/projects/" + item.data.systemId, {}, function(result, isok) {
            // Util.ajax.getJson(AjaxPath.demand + "/projects/" + item.data.id, {}, function(result, isok) {
                // console.log(result.beans.project);
                var data=result.beans.project;
                if(result.returnCode === "0000"){
                    if(dialogAuthority){                   
                    var config = {
                        mode: 'normal', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                        delayRmove: "", //延迟删除秒数设定 tips默认3秒,非tips默认不关闭。
                        title: data.projectName+'项目信息', //对话框标题，
                        content: Util.hdb.compile(tabelTpl)(data), //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                        ok: function() { 
                            console.log('点击了修改按钮');
                            editProject(e, e.currentTarget.parentNode.rowIndex);
                            return true;
                        }, 
                        cancel: function() { 
                            search();
                            return true;
                        },
                        cancelValue: '关闭', //取消按钮的文本 默认是 ‘关闭’
                        okValue: '修改', //取消按钮的文本 默认是 ‘关闭’
                        cancelDisplay: false, //是否显示取消按钮 默认true显示|false不显示
                        width: 920, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                        height: parseInt($(".sn-tab.J_tab_render").height()-120), //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                        padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                        skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                        modal: true //是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                    };
                    var dialog = new Dialog(config); 
                } else {
                    var config = {
                        mode: 'normal', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                        delayRmove: "", //延迟删除秒数设定 tips默认3秒,非tips默认不关闭。
                        title: data.projectName+'项目信息', //对话框标题，
                        content: Util.hdb.compile(tabelTpl)(data), //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                      
                        cancel: function() { 
                            search();
                            return true;
                        },
                        cancelValue: '关闭', //取消按钮的文本 默认是 ‘关闭’
                        okValue: '修改', //取消按钮的文本 默认是 ‘关闭’
                        cancelDisplay: false, //是否显示取消按钮 默认true显示|false不显示
                        width: 920, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                        height: parseInt($(".sn-tab.J_tab_render").height()-120), //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                        padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                        skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                        modal: true //是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                    };
                    var dialog = new Dialog(config); 
                }


                } else {
                   new Dialog({
                        mode: 'tips',
                        content: '<div style="text-align:center;margin-top:70px">'+result.returnMessage+'</div>',
                        width: 300, //对话框宽度，可选项。normal默认值为600，confirm默认值为300，tips默认值为240
                        height: 150, //对话框高度，可选项。normal默认值为400，confirm默认值为180，tips默认值为80
                        cancelDisplay: false
                    });
                }          
            });
            
        }


        //浮层上的活动日志；
        var crtActlogList = function (){
            var config = {
                el: $('#projectActiveLog'),
                ajax:{    //所有jquery.ajax的配置项均可配置，这些配置将替换底层组件的配置；慎用
                    method:'GET'
                },
                field: {
                    boxType: 'radio',
                    key: 'id',
                    items: [
                    {
                        text: '项目名称',
                        title: 'projectName',
                        name: 'projectName',
                        width: 40
                    },
                    {
                        text: '项目标识',
                        title: 'tagName',
                        name: 'tagName',
                        width: 100
                    }]
                },
                page: {
                    customPages: [2, 3, 5, 10, 15, 20, 30, 50], //可选择每页显示多少条
                    perPage: 5, //默认每页显示多少条记录
                    total: true
                },
                data: {
                    url: AjaxPath.demand + "/projects"
                    // url:"http://192.168.91.172:8089/devops-project/projects"
                    // url:"../../../data/list1.json"
                }
            };
            ActiveLogList = new List(config);
            ActiveLogList.search();
            $(".ui-dialog-grid .sn-list-header").hide();
        }
        var actLogChange = function(){
            $("#projectActiveLogWrap .t-list li").removeClass("actived");
            $(this).parent().addClass("actived");
        }




        var createLoading = function() {
            loadingConfig = {
                el: 'body', //组件要绑定的容器，默认为body（此项可不配置或留空）
                className: 'loading', //组件外围的className
                position: 'center', //提示信息位置，顶部top|默认center中央
                width: '300', //loading的宽度,非必须，默认300
                height: 'auto', //loading的宽度,非必须，默认auto
                mask: 1, //是否显示遮罩， 0不显示|默认1显示
                animate: 1, //是否显示动画效果， 0不显示|默认1显示
                mode: 'layer', //展示方式 loadingLine线条方式|默认layer弹层方式
                text: '加载中...', //提示文字，默认 加载中...
                icon: 'dotCycle', //文字前面的gif动画， 默认dotCycle有点组成的圈|cmcc移动图标|cmccLarge大的移动图标
            }
        };

        //查看工作项浮层；
        var createDialogViewRequirement = function(e, item){
            item.data.menuId = tplId;
            require(['js/requirement/viewRequirement'], function(viewRequirement) {
                var resultViewRequirement = new viewRequirement({}, item.data, tab);
                var config = {
                    mode: 'normal', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                    title: "查看工作项", //对话框标题，
                    content: resultViewRequirement.content, //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                    cancelValue: '关闭', //取消按钮的文本 默认是 ‘关闭’
                    okValue: '修改', //取消按钮的文本 默认是 ‘关闭’//取消按钮的文本 默认是 ‘关闭’
                    cancelDisplay: false, //是否显示取消按钮 默认true显示|false不显示
                    width: 1000, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 490, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                    maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                    maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                    padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                    align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                    skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                    fixed: false, //是否开启固定定位 默认false不开启|true开启
                    quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                    modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                    backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                    backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                    beforeOpen: function() {
                        console.log('对话框打开时执行。');

                    }, //对话框打开之前执行。
                    escClose:true,//esc键快速关闭对话框，默认为true
                    zIndex:990   // 对话框的z-index值，默认是1024。
                };
               var dialog= new Dialog(config);
               dialog.on('onclose',function(){
                console.log('弹窗关闭');search(list.pageIndex);
            });
            });
        };
        
        //查看子工作项；
        var viewSubTaskDialog = function(e, item){
            item.data.menuId = tplId;        
            require(['js/requirement/viewSubTask'], function(viewSubTask) {
                var resultViewSubTask = new viewSubTask({}, item.data, tab);
                var config = {
                    mode: 'normal', //对话框模式，默认normal标准|tips浮动层|confirm确认对话框
                    title:"查看子工作项", //对话框标题，
                    content: resultViewSubTask.content, //对话框内容，可以是字符串、html代码段,tpl对象。默认为loading状态（由点组成的圈。大段代码建议使用 tpl。
                    cancelValue: '关闭', //取消按钮的文本 默认是 ‘关闭’
                    okValue: '修改', //取消按钮的文本 默认是 ‘关闭’//取消按钮的文本 默认是 ‘关闭’
                    cancelDisplay: false, //是否显示取消按钮 默认true显示|false不显示
                    width: 1000, //对话框宽度，normal默认值为600，confirm默认值为300，tips默认值为240
                    height: 490, //对话框高度，normal默认值为400，confirm默认值为180，tips默认值为80
                    maxWidth: 240,//设置tips对话框的最大宽度,默认为240px。仅在tips对话框下生效，该项存在时，width属性将失效。
                    maxHeight: 'auto', //设置tips对话框的最大高度,默认为auto。仅在tips对话框下生效，该项存在时，height属性将失效。
                    padding:'0 16px 1em 10px',//(默认值: 继承 css 文件设置) 设置消息内容与消息容器的填充边距，即 style padding属性
                    align: 'bottom left',//设置对话框与其他元素的对齐方式。仅在show(elem)与showModal(elem)传入元素时生效。默认值: "bottom left"。可选："top left" "top" "top right" "right top" "right" "right bottom" "bottom right" "bottom" "bottom left" "left bottom" "left" "left top"。
                    skin: 'dialogSkin dialogSkin2',//设置对话框额外的className参数,多个className请使用空格隔开。
                    fixed: false, //是否开启固定定位 默认false不开启|true开启
                    quickClose: false, //点击空白处快速关闭 默认false不关闭|true关闭
                    modal: true ,//是否开启模态框状态  默认false不开启|true开启,confirm默认状态为true
                    backdropBackground:'#000',//设置遮罩颜色，默认 #000。
                    backdropOpacity:0.7, //设置遮罩透明度，默认 0.7，取值范围：0~1 。
                    beforeOpen: function() {
                        console.log('对话框打开时执行。');

                    }, //对话框打开之前执行。
                    escClose:true,//esc键快速关闭对话框，默认为true
                    zIndex:990   // 对话框的z-index值，默认是1024。
                };
                new Dialog(config);
            });
        };



         //验证list表格 修改和删除按钮权限;还有查看项目信息浮层，修改项目按钮id=4；
        var getAuthority = function() {
            Util.ajax.getJson(AjaxPath.auth + '/authority/button/'+ $cookie.get("userId") +'?datas=[{"mo":"15","btnId":"list"},{"mo":"4","btnId":"dialog"}]', {}, function(result, json){
            if(result.returnCode==="0000"){
                Authority = false;
                dialogAuthority=false;
                for (var i in result.beans){
                    if(result.beans[i].btnId==="list"&&result.beans[i].mo===1){
                        Authority = true;
                    }
                }
                for (var i in result.beans){
                    if(result.beans[i].btnId==="dialog"&&result.beans[i].mo===1){
                       dialogAuthority=true;
                    }
                }
            }
            listInit();
        })
        };

        // 判断用户权限是否可见：新增工作项，删除选中，导出选中，全部导出，按钮并显示；
                
         var btnAuthority = function($el){
            require(['js/btnAuthority'], function(Authority){
                new Authority($el);
            }); 
            
         }


        return initialize;
});